using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Marlimer.Common;
using Marlimer.Common.Entidades;

namespace Marlimer.Data.Comercial
{
    public class com_Proveedor
    {

        public DataTable getProveedorByCod(int ccod_prov)
        {
            SqlCommand sqlcmd = new SqlCommand();
            SqlDataAdapter da = new SqlDataAdapter();
            DataSet ds = new DataSet();

            sqlcmd.CommandText = "spsBuscarProveedorByCod";
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.Connection = Session.getConexion();

            sqlcmd.Parameters.Add("@ccod_prov", SqlDbType.Int);
            sqlcmd.Parameters["@ccod_prov"].Value = ccod_prov;

            da.SelectCommand = sqlcmd;
            da.Fill(ds);

            return ds.Tables[0]; 
        }


        public DataTable getProveedorDatosByCod(int ccod_prov)
        {
            SqlCommand sqlcmd = new SqlCommand();
            SqlDataAdapter da = new SqlDataAdapter();
            DataSet ds = new DataSet();

            sqlcmd.CommandText = "spsProveedorDatosByCod";
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.Connection = Session.getConexion();
            sqlcmd.Parameters.Add("@ccod_prov", SqlDbType.Int);
            sqlcmd.Parameters["@ccod_prov"].Value = ccod_prov;

            da.SelectCommand = sqlcmd;
            da.Fill(ds);
            return ds.Tables[0];
        }

        public DataTable getBuscarProveedor(int ccod_prov, int ctip_docide, String cnum_docide,
               String craz_soc, String cdir_fiscal, int ccod_ubifis, int flg_anulados)
        {
            SqlCommand sqlcmd = new SqlCommand();
            SqlDataAdapter da = new SqlDataAdapter();
            DataSet ds = new DataSet();

            sqlcmd.CommandText = "spsBuscarProveedor";
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.Connection = Session.getConexion();

            sqlcmd.Parameters.Add("@ccod_prov", SqlDbType.Int);
            sqlcmd.Parameters.Add("@ctip_docide", SqlDbType.Int);
            sqlcmd.Parameters.Add("@cnum_docide", SqlDbType.NVarChar, 11);
            sqlcmd.Parameters.Add("@craz_soc", SqlDbType.NVarChar, 70);
            sqlcmd.Parameters.Add("@cdir_fiscal", SqlDbType.NVarChar, 70);
            sqlcmd.Parameters.Add("@ccod_ubifis", SqlDbType.Int);
            sqlcmd.Parameters.Add("@flg_anulados", SqlDbType.Int);

            sqlcmd.Parameters["@ccod_prov"].Value = ccod_prov;
            sqlcmd.Parameters["@ctip_docide"].Value = ctip_docide;
            sqlcmd.Parameters["@cnum_docide"].Value = cnum_docide;
            sqlcmd.Parameters["@craz_soc"].Value = craz_soc;
            sqlcmd.Parameters["@cdir_fiscal"].Value = cdir_fiscal;
            sqlcmd.Parameters["@ccod_ubifis"].Value = ccod_ubifis;
            sqlcmd.Parameters["@flg_anulados"].Value = flg_anulados;
            
            da.SelectCommand = sqlcmd;
            da.Fill(ds);

            return ds.Tables[0]; 
        }


        public resulMsgError guardar(InfoProveedor prov)
        {
            resulMsgError resul = new resulMsgError(false, "");
            SqlTransaction transac = Session.getConexion().BeginTransaction("saveprov");

            SqlCommand sqlcmd = new SqlCommand();
            sqlcmd.CommandText = "spiaProveedor";
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.Connection = Session.getConexion();
            sqlcmd.Transaction = transac;

            try
            {
                sqlcmd.Parameters.Add("@ccod_prov", SqlDbType.Int);
                sqlcmd.Parameters.Add("@craz_soc", SqlDbType.NVarChar, 70);
                sqlcmd.Parameters.Add("@craz_com", SqlDbType.NVarChar, 70);
                sqlcmd.Parameters.Add("@ctip_per", SqlDbType.Int);
                sqlcmd.Parameters.Add("@ctip_docide", SqlDbType.Int);
                sqlcmd.Parameters.Add("@cnum_docide", SqlDbType.NVarChar, 11);
                sqlcmd.Parameters.Add("@cdir_fiscal", SqlDbType.NVarChar, 70);
                sqlcmd.Parameters.Add("@ccod_ubifis", SqlDbType.Int);
                sqlcmd.Parameters.Add("@cref_fis", SqlDbType.NVarChar, 70);
                sqlcmd.Parameters.Add("@cpagweb", SqlDbType.NVarChar, 70);
                sqlcmd.Parameters.Add("@cemail", SqlDbType.NVarChar, 50);
                sqlcmd.Parameters.Add("@cobservacion", SqlDbType.NVarChar, 50);
                sqlcmd.Parameters.Add("@cstatus", SqlDbType.NChar, 1);
                sqlcmd.Parameters.Add("@cpc_crea", SqlDbType.NVarChar, 50);
                sqlcmd.Parameters.Add("@cuser_crea", SqlDbType.Int);
                sqlcmd.Parameters.Add("@cmodo", SqlDbType.Int);

                sqlcmd.Parameters["@ccod_prov"].Value = prov.ccod_prov;
                sqlcmd.Parameters["@craz_soc"].Value = prov.craz_soc;
                sqlcmd.Parameters["@craz_com"].Value = prov.craz_com;
                sqlcmd.Parameters["@ctip_per"].Value = prov.ctip_per;
                sqlcmd.Parameters["@ctip_docide"].Value = prov.ctip_docide;
                sqlcmd.Parameters["@cnum_docide"].Value = prov.cnum_docide;
                sqlcmd.Parameters["@cdir_fiscal"].Value = prov.cdir_fiscal;
                sqlcmd.Parameters["@ccod_ubifis"].Value = prov.ccod_ubifis;
                sqlcmd.Parameters["@cref_fis"].Value = prov.cref_fis;
                sqlcmd.Parameters["@cpagweb"].Value = prov.cpagweb;
                sqlcmd.Parameters["@cemail"].Value = prov.cemail;
                sqlcmd.Parameters["@cobservacion"].Value = prov.cobservacion;
                sqlcmd.Parameters["@cstatus"].Value = prov.cstatus;
                sqlcmd.Parameters["@cpc_crea"].Value = Session.getComputerName();
                sqlcmd.Parameters["@cuser_crea"].Value = Session.getInfousuario().ccod_user;
                sqlcmd.Parameters["@cmodo"].Value = prov.cmodo;

                int ccod_prov = 0;
                if (prov.cmodo == 1)
                {//insertar
                    ccod_prov = Convert.ToInt32(sqlcmd.ExecuteScalar());
                }
                else
                {//actualizar
                    ccod_prov = prov.ccod_prov;
                    sqlcmd.ExecuteNonQuery();
                }

                //si el modo es diferente de 3 
                if (prov.cmodo != 3)
                {
                    sqlcmd.CommandText = "spiaProveedorTelefono";
                    sqlcmd.Transaction = transac;
                    sqlcmd.Parameters.Clear();
                    sqlcmd.Parameters.Add("@ccod_telf", SqlDbType.Int);
                    sqlcmd.Parameters.Add("@ccod_prov", SqlDbType.Int);
                    sqlcmd.Parameters.Add("@ctip_telf", SqlDbType.Int);
                    sqlcmd.Parameters.Add("@cnum_telf", SqlDbType.NVarChar, 15);
                    sqlcmd.Parameters.Add("@cnum_anex", SqlDbType.NVarChar, 15);
                    sqlcmd.Parameters.Add("@cstatus", SqlDbType.NChar, 1);
                    sqlcmd.Parameters.Add("@cmodo", SqlDbType.Int);

                    foreach (InfoProveedorTelefono provtelf in prov.telfs)
                    {
                        sqlcmd.Parameters["@ccod_telf"].Value = provtelf.ccod_telf;
                        sqlcmd.Parameters["@ccod_prov"].Value = ccod_prov;
                        sqlcmd.Parameters["@ctip_telf"].Value = provtelf.ctip_telf;
                        sqlcmd.Parameters["@cnum_telf"].Value = provtelf.cnum_telf;
                        sqlcmd.Parameters["@cnum_anex"].Value = provtelf.cnum_anex;
                        sqlcmd.Parameters["@cstatus"].Value = provtelf.cstatus;
                        //si tiene codigo mayor que 0 entonces es modo 2
                        if (provtelf.ccod_telf > 0)
                        {
                            sqlcmd.Parameters["@cmodo"].Value = 2;
                        }
                        else
                        {
                            sqlcmd.Parameters["@cmodo"].Value = 1;
                        }
                        sqlcmd.ExecuteNonQuery();
                    }
                }

                transac.Commit();

                //verificamos el tipo de mensaje a mostrar
                if (prov.cmodo == 3)
                {
                    resul.message = "Anulado satisfactoriamente";
                }
                else
                {
                    resul.message = "Se guardo satisfactoriamente";
                }
                resul.resul = true;
            }
            catch (Exception ex)
            {
                transac.Rollback();  
                resul.message = ex.Message;
            }
            return resul;
        }


        public DataTable getProveedorTelefByCod(int ccod_prov)
        {
            SqlCommand sqlcmd = new SqlCommand();
            SqlDataAdapter da = new SqlDataAdapter();
            DataSet ds = new DataSet();

            sqlcmd.CommandText = "spsProveedorTelefonoByCod";
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.Connection = Session.getConexion();
            sqlcmd.Parameters.Add("@ccod_prov", SqlDbType.Int);
            sqlcmd.Parameters["@ccod_prov"].Value = ccod_prov;

            da.SelectCommand = sqlcmd;
            da.Fill(ds);
            return ds.Tables[0]; 
        }
    }
}
